packages = ["shapely"]

Interactive Spatial Analysis on the Web

import json from shapely.geometry import shape from pyscript import display import statistics from js import window try: TexCounty = window.TexCounty except Exception as e: display("Error: TexCounty variable not defined. Check your data/TexasCounty.js file.", target="adjOutput") raise e txcounty_dict = TexCounty.to_py() features = txcounty_dict.get("features", []) if not features: result_str = "No features found in TexCounty data." else: polygons = [] county_names = [] for i, feature in enumerate(features): if feature.get("geometry"): polygons.append(shape(feature.get("geometry"))) name = feature.get("properties", {}).get("name", f"County {i+1}") county_names.append(name) def is_neighbor(p1, p2): return p1.touches(p2) n = len(polygons) adj_matrix = [[0] * n for _ in range(n)] for i in range(n): for j in range(n): if i != j and is_neighbor(polygons[i], polygons[j]): adj_matrix[i][j] = 1 num_neighbors = [sum(row) for row in adj_matrix] avg_neighbors = sum(num_neighbors) / n if n > 0 else 0 max_neighbors = max(num_neighbors) min_neighbors = min(num_neighbors) max_index = num_neighbors.index(max_neighbors) min_index = num_neighbors.index(min_neighbors) county_max = county_names[max_index] county_min = county_names[min_index] try: mode_neighbors = statistics.mode(num_neighbors) except statistics.StatisticsError: mode_neighbors = statistics.multimode(num_neighbors) result_str = "TexCounty Adjacency Calculation (Scientific Approach):\n" result_str += f"Number of counties: {n}\n" result_str += f"Average number of neighbors: {avg_neighbors:.2f}\n" result_str += f"County with most neighbors: {county_max} ({max_neighbors} neighbors)\n" result_str += f"County with least neighbors: {county_min} ({min_neighbors} neighbors)\n" result_str += f"Mode of neighbors: {mode_neighbors}\n" display(result_str, target="adjOutput")